package com.xwm93up.basic.enumtips;

/**
 * @Description: desc
 * @Author: xwm93up
 * @Since: 2021/11/30 14:20
 */
public class Singleton {
    // 构造函数私有化
    private Singleton() {
    }

    // 定义一个内部枚举
    public enum SingletonEnum {
        SEED; //唯一一个枚举对象, 我们称它为"种子选手"
        private Singleton singleton;

        SingletonEnum() {
            singleton = new Singleton(); // 真正的对象创建隐蔽在此
        }

        public Singleton getInstance() {
            return singleton;
        }
    }

    // 故意外露的对象获取方法，也是外面获取实例的唯一入口
    public static Singleton getInstance() {
        return SingletonEnum.SEED.getInstance(); // 通过枚举的种子选手来完成
    }

    // 测试实例化的两个对象是否是同一对象
    public static void main(String[] args) {
        final Singleton instance1 = getInstance();
        final Singleton instance2 = getInstance();
        System.out.println(instance1 == instance2); // true
    }
}
